package com.cskaoyan.market.service.impl;

import com.cskaoyan.market.db.domain.MarketUser;
import com.cskaoyan.market.db.domain.MarketUserExample;
import com.cskaoyan.market.db.mapper.MarketUserMapper;
import com.cskaoyan.market.service.AdminUserService;
import com.cskaoyan.market.util.MybatisUtil;
import com.github.pagehelper.PageHelper;
import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.session.SqlSession;

import java.util.List;

/**
 * @ClassName AdminUserServiceImpl
 * @Description: TODO
 * @Author 远志 zhangsong@cskaoyan.onaliyun.com
 * @Date 2023/6/19 14:39
 * @Version V1.0
 **/
public class AdminUserServiceImpl implements AdminUserService {


    /**
     * 关于分页，这里面是这样的：
     * 如果我们使用自己拼接分页sql语句的话，那么我们需要去手动修改mapper映射文件里面的sql语句
     * 不分页时和分页时对应的sql语句是不同的，需要进行判断
     * 有没有一种方式，可以在sql语句执行之前，取出sql语句，判断是否需要进行分页，如果需要进行分页，则在此时将sql语句拼接上分页的sql语句，无需开发人员手动去拼接
     * 类似于filter的效果：sql语句即将发送到数据库执行之前，取出里面的sql语句，拼接处分页sql，便执行了分页效果；如果不需要分页，则不执行该分页sql语句即可
     * @param page
     * @param limit
     * @param sort
     * @param order
     * @param username
     * @param mobile
     * @return
     */
    @Override
    public List<MarketUser> list(Integer page, Integer limit, String sort, String order, String username, String mobile) {
        SqlSession session = MybatisUtil.getSession();
        MarketUserMapper marketUserMapper = session.getMapper(MarketUserMapper.class);
        MarketUserExample marketUserExample = new MarketUserExample();
        MarketUserExample.Criteria criteria = marketUserExample.createCriteria();
        // select * from market_user order by add_time desc limit xxx offset xxx
        //select * from market_user where username = ? and mobile = ? order by add_time desc limit xxx offset xxx
        if(!StringUtils.isEmpty(username)){
            criteria.andUsernameLike("%" + username + "%");
        }
        if(!StringUtils.isEmpty(mobile)){
            criteria.andMobileLike("%" + mobile + "%");
        }
        // add_time desc
        marketUserExample.setOrderByClause(sort + " " + order);
        //分页还没有去配置 TODO
        PageHelper.startPage(page, limit);
        //如果我们使用分页插件来进行查询，那么返回的list的类型是Page类型
        //page类型继承自Arraylist类型，你可以理解为pageHelper在执行分页功能时，会使用一个page对象来继承Arraylist，用这个对象来接收数据，不仅仅只是接收了list里面的具体数据，还接收了诸如总条目数、总页数等其他数据，这样便方便了我们的查询
//        marketUserMapper.selectByExampleSelective(marketUserExample, MarketUser.Column.id, MarketUser.Column.birthday);
        List<MarketUser> marketUsers = marketUserMapper.selectByExample(marketUserExample);
        session.commit();
        session.close();
        return marketUsers;
    }
}
